import { apiGetPageButtons, apiGetPageInfo, apiUserAuthRouters}from '@/api/common'
import { reactive, watchEffect } from 'vue';
import LocalCache from '@/utils/cache'

/**
 * @method 页面公共方法
 * @param { Object } config - 页面配置
 * @param { String | Number } config.pageEname - 页面编码
 * @param { Array } config.cacheList - 页面缓存,可能多个条件查询
 */
export default function usePage(config) {
    interface CacheItem {
        cacheId: string;
        cacheValue: string | null;
      }
    const usePageData  = reactive({
        buttonsList: [],
        allRouters: [],
        pageInfo: null,
        loading: false, // 页面全局loading状态
        cacheList: [], // 页面缓存集合,可能多个条件查询 是所有缓存id的集合 cacheId
        cacheListObj: [] as CacheItem[] // 页面缓存,可能多个条件查询
    });
    // 获取用户所有页面路由 userAuth/getPageRouters
    const getUserAuthRouters = () => {
        apiUserAuthRouters({})
            .then((res) => {
                if (res.data.success) {
                    usePageData.allRouters = res.data.data
                } 
            }) 
        }
    // 获取页面信息配置
    const getPageInfoData = () => {
        apiGetPageInfo({formEname: config.pageEname})
            .then((res) => {
                if (res.data.success) {
                    usePageData.pageInfo = res.data.data
                } 
            }) 
        }
    // 获取页面权限按钮列表
    const getPageButtonsData = () => {
        apiGetPageButtons({pageEname: config.pageEname})
            .then((res) => {
                if (res.data.success) {
                    usePageData.buttonsList = res.data.data.result
                } 
            }) 
        }
    // 获取页面缓存
    const getPageCache = () => {
        const tempArr: CacheItem[] = [];
        if (Array.isArray(config.cacheList)) {
            config.cacheList.forEach((item: string) => {
                const cacheValue = LocalCache.getCache(item);
                // 添加类型断言，确保 push 的元素具有正确的类型
                tempArr.push({
                    cacheId: item,
                    cacheValue: cacheValue as string | null,
                });
            });
        }
        usePageData.cacheListObj = tempArr;
        return tempArr;
    }
    // 监听缓存值变化，如有变化则自动同步 ---- 
    
    // 立即获取页面信息和按钮列表,缓存集合
    watchEffect(async () => {
        await getPageInfoData();
        await getPageButtonsData();
        await getPageCache()
    });

  return {
    usePageData,
    getPageInfoData,
    getPageButtonsData,
    getPageCache,
    getUserAuthRouters
  };
}